split_CH Subroutine

private elemental subroutine split_CH(string, word, set, separator, back)

Split a varying string into two verying strings

Arguments

Type IntentOptional Attributes Name
type(varying_string), intent(inout) :: string
type(varying_string), intent(out) :: word
character(len=*), intent(in) :: set
type(varying_string), intent(out), optional :: separator
logical, intent(in), optional :: back

Variables

Type Visibility Attributes Name Initial
logical, private :: back_
integer, private :: i_separator

Source Code

  elemental subroutine split_CH (string, word, set, separator, back)

    type(varying_string), intent(inout)         :: string
    type(varying_string), intent(out)           :: word
    character(LEN=*), intent(in)                :: set
    type(varying_string), intent(out), optional :: separator
    logical, intent(in), optional               :: back

    logical                                     :: back_
    integer                                     :: i_separator


    if(PRESENT(back)) then
       back_ = back
    else
       back_ = .false.
    endif

    i_separator = scan(string, set, back_)

    if(i_separator /= 0) then

       if(back_) then
          word = extract(string, start=i_separator+1)
          if(PRESENT(separator)) separator = extract(string, start=i_separator, finish=i_separator)
          string = extract(string, finish=i_separator-1)
       else
          word = extract(string, finish=i_separator-1)
          if(PRESENT(separator)) separator = extract(string, start=i_separator, finish=i_separator)
          string = extract(string, start=i_separator+1)
       endif

    else

       word = string
       if(PRESENT(separator)) separator = ''
       string = ''

    endif

! Finish

    return

  end subroutine split_CH